//
// File:	IEntityManager.hpp
// Author:	Thomas TISSOT-DUPONT
// Login:	<thomas.tissotdupont@free.fr>
//
// Create:	27/01/2010 at 17:31:05
// Purpose:	
//
#ifndef IENTITYMANAGER_HPP
#define IENTITYMANAGER_HPP

#include <list>
#include <string>
#include "IEntity.hpp"

//------------------------------------------------------------------
// Types
//------------------------------------------------------------------
class IEntity;
typedef std::list<IEntity *>			tEntList;

//------------------------------------------------------------------
// Interface
//------------------------------------------------------------------
class IEntityManager
{
public:
	virtual								~IEntityManager() {}

public:
	virtual const tEntList				&GetEntities() const = 0;
	virtual const tEntList				GetEntitiesByClassName(const std::string &) const = 0;
	virtual IEntity						*GetEntityByID(unsigned long) const = 0;

public:
	virtual void						AddEntity(IEntity *pEntity) = 0;

public:
	virtual void						UpdatePreEntities() const = 0;
	virtual void						UpdatePostEntities() const = 0;
	virtual void						RenderEntities() const = 0;

public:
	virtual void						RemoveUnusedEntities() = 0;
	virtual void						Clear() = 0;
};

#endif //!IENTITYMANAGER_HPP
